/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;

/**
 *
 * @author odeen
 */
public class ProyectoDAOParametrosConNombreImpl extends NamedParameterJdbcDaoSupport implements ProyectoDAO{
    private final String INSERTAR_LIBRO = "insert into libro (id,isbn,titulo,numeroPaginas) " +
            "values (:id,:isbn,:titulo,:numeroPaginas)";
    private final String BORRAR_LIBRO = "delete from libro " +
            "where id = :id";
    private final String MODIFICAR_LIBRO = "update libro set isbn=:isbn, titulo=:titulo, numeroPaginas=:numeroPaginas " +
            "where id = :id";
    private final String SELECT_LIBRO = "select id,isbn,titulo,numeroPaginas from libro ";
    private final String SELECT_BY_ID_LIBRO = SELECT_LIBRO + "where id=:id";

     @Override
   public void guardarLibro(Libro libro) {
        Map parametros = new HashMap();
        parametros.put("id", libro.getId());
        parametros.put("isbn", libro.getIsbn());
        parametros.put("titulo", libro.getTitulo());
        parametros.put("numeroPaginas", libro.getNumeroPaginas());
        this.getNamedParameterJdbcTemplate().update(INSERTAR_LIBRO, parametros);
    }

    @Override
    public void actualizarLibro(Libro libro) {
        Map parametros = new HashMap();
        parametros.put("isbn", libro.getIsbn());
        parametros.put("titulo", libro.getTitulo());
        parametros.put("numeroPaginas", libro.getNumeroPaginas());
        parametros.put("id", libro.getId());
        this.getNamedParameterJdbcTemplate().update(MODIFICAR_LIBRO, parametros);
    }

    @Override
    public void borrarLibro(Libro libro) {
        Map parametros = new HashMap();
        parametros.put("id", libro.getId());
        this.getNamedParameterJdbcTemplate().update(BORRAR_LIBRO, parametros);    
    }

    @Override
    public Libro buscarLibroPorId(int id) {
        Map valores = new HashMap();
        valores.put("id", id);
        List hallados = this.getNamedParameterJdbcTemplate().query(SELECT_BY_ID_LIBRO,
                valores,
                new RowMapper() {
                    @Override
                    public Object mapRow(ResultSet rs, int numeroRegistros) throws SQLException {
                        Libro l = new Libro();
                        l.setId(rs.getInt(1));
                        l.setIsbn(rs.getString(2));
                        l.setTitulo(rs.getString(3));
                        l.setNumeroPaginas(rs.getInt(4));
                        return l;
                    }
                });
          return (Libro) ((hallados.size()>0)?hallados.get(0):null);
    }
}
